//导入fs
const fs = require('fs');


//创建文件或替换、该方式属于异步,flag:'a' 内容追加、就像写日志一样
fs.writeFile('./testFileName.txt','你好啊，我是文件内容\r\n', {flag:'a'}, err => {
        if(err) console.error('创建失败'); else console.log('创建成功');
    }
);

//创建文件或替换、该方式属于同步
//fs.writeFileSync('./testFileName.txt','你好啊我是文件内容!\r\n',{flag:'a'});

/*
//流式写入
const ws = fs.createWriteStream('./观书有感.txt');
ws.write('半亩方塘一鉴开\r\n');
ws.write('天光云影共徘徊\r\n');
ws.write('问渠那得清如许\r\n');
ws.write('为有源头活水来\r\n');
//ws.close(); //关闭通道、这个脚本运行完也会自动关闭、这里也可以忽略
*/


//异步读取文件内容
// fs.readFile('./观书有感.txt',(err, data) => {
//     if(err) console.error("读取文件异常", err); else console.log(data.toString());//读取文件内容
// });


//同步读取文件内容
//const data = fs.readFileSync('./观书有感.txt');
//console.log(data.toString());//读取文件内容

//文件流式读取(大文件分批读取)
// const rs = fs.createReadStream('./观书有感.txt');
// rs.on('data', chunk => {console.log(chunk.toString());}); //读取数据
// rs.on("end", () =>{console.log('读取完毕');});  //读取完毕回调

//文件复制、方式1
// let readData1 = fs.readFileSync('./观书有感.txt'); //读取文件、将文件全部读取到内存
// fs.writeFileSync('./观书有感_readData1_copy.txt', readData1); //写入文件
fs.writeFileSync('./观书有感_readData1_copy.txt', fs.readFileSync('./观书有感.txt'));//读取文件、并写入

//文件复制、方式2、流式操作
let readData2 = fs.createReadStream('./观书有感.txt'); //创建读取流
let wsData2 = fs.createWriteStream('./观书有感_readData2_copy.txt'); //创建写入流
readData2.on('data', chunk => wsData2.write(chunk)); //分块读取与写入
readData2.on('end', () => {console.log('复制完毕2');}); //复制完毕则回调

//readData2.pipe(wsData2); //直接拷贝方式、可以忽略上面的2个事件方式、用的不多以后看的这个知道是复制的意思就行


//文件的重命名与移动(异步方式)
// fs.rename('./观书有感_readData2_copy.txt', './观书有感_修改文件名.txt', err => {
//     if(err) console.log('重命名或移动文件异常'); else console.log('重命名或移动文件成功');
// });

//文件的重命名与移动(同步方式)
//fs.renameSync('./观书有感_readData2_copy.txt', './观书有感_修改文件名1.txt');

//删除文件(异步方式)1
// fs.unlink('./观书有感_修改文件名1.txt', err => {
//     if(err) console.error('删除文件异常', err); else console.log('删除文件成功');
// });

//删除文件(同步方式)2
//fs.unlinkSync('./观书有感_readData2_copy.txt'); 

//删除文件(异步方式)3、14.4版本新增的删除方式
// fs.rm('./观书有感_readData2_copy.txt', err => {
//     if(err) console.error('删除文件异常', err);else console.log('删除文件成功');
// });

//------------文件夹操作------------

//创建文件夹(异步)
// fs.mkdir('./a/b/c',{recursive: true}, err => { //recursive:true、默认false, 支持递归多级目录
//     if(err) console.error('创建文件夹异常', err);else console.log('创建文件夹成功');
// });

//fs.mkdirSync('./a/b/c', {recursive: true}); //创建文件夹(同步)

//读取文件下的所有文件(异步)
// fs.readdir('../node_js', (err, data) => {
//     if(err) console.error('读取文件夹下文件异常', err); else console.log(data);
// });

//console.log(fs.readdirSync('../node_js')); //读取文件下的所有文件(同步)

//删除文件夹(异步)、老版本方式fs.rmdir, rm方式是新版的支持文件和目录都可以删除
// fs.rm('./a',{recursive: true}, err => { //recursive:true、默认false, 支持递归多级目录
//     if(err) console.error('删除文件夹异常', err);else console.log('删除文件夹成功');
// });

//fs.rmSync('./a',{recursive: true}); //删除文件夹(同步)、老版本方式fs.rmdirSync

//查看文件状态(异步)
// fs.stat('./观书有感.txt', (err, data) => {
//     if(err) console.error('查看文件状态异常', err); 
//     else {
//         console.log(data); //data具体参数详解、查看百度
//         console.log("是否文件：", data.isFile());
//         console.log("是否文件夹：", data.isDirectory());
//     }
// });
//console.log(fs.statSync('./观书有感.txt')); //查看文件状态(同步)

//--------------------路径操作--------------------
const path = require('path');
path.resolve(__dirname, 'index.html'); //返回绝对路径: D:\git_data\work-web\node_js\index.html
path.sep; //查看系统的分隔符：windows: \ , Linux: /
console.log(__filename); //返回当前文件的绝对路径：D:\git_data\work-web\node_js\helloword-node.js
path.parse(__filename);//解析路径、并返回对象：{root: 'D:\\',dir: 'D:\\git_data\\work-web\\node_js',base: 'helloword-node.js',ext: '.js',name: 'helloword-node'}
path.dirname(__filename); //获取文件路径：D:\git_data\work-web\node_js
path.basename(__filename); //获取文件名称: helloword-node.js
path.extname(__filename); //获取文件后缀：.js

